#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
    printf("I am father, pid: %d\n", getpid());
    printf("父进程休眠\n");
    pid_t id=fork();
    if(id==0)//child
    {
        int cnt =3;
        while(cnt)
        {
          printf("I am child process, pid: %d, ppid:%d, cnt: %d\n", getpid(), getppid(), cnt);
          cnt--;  
        }
        printf("子进程退出\n");                 
        exit(1);
    }
    // father
    sleep(5);
    int status=0;
    printf("父进程准备回收子进程\n");
    pid_t rid=waitpid(id,&status,0);
    if(rid>0) printf("回收子进程成功,僵尸进程:%d\n",rid);
    sleep(2);
    printf("father quit, status: %d, child quit code : %d, child quit signal: %d\n", status, (status>>8)&0xFF, status & 0x7F);
    return 0; 
}










//int main()
//{
//    printf("hello world");
//    sleep(1);
//   _exit(123);
//
//
//   // while(1)
//   // {
//   //     printf("i am a process pid:%d\n",getpid());
//   //     sleep(2);
//   // }
//   // int *p=NULL;
//   // *p=100;
//   // return 0;
//}




//enum{
//  Sucess=0,
//  div_zero,
//  Mod_zero,
//};
//
//int exit_code=Sucess;
//
//int Div(int a,int b)
//{
//    if(b==0)
//    {
//      exit_code=div_zero;
//    }
//    else return a/b;
//}
//
//const char* code_to_str(int code)
//{
//    switch(code)
//    {
//        case Sucess:
//            return "Sucess";
//        case div_zero:
//            return "div_zero";
//        case Mod_zero:
//            return "Mod_zero";
//        default:
//            return "unknow";
//    }
//}
//
//int main()
//{
//    //自定义退出码
//    int res=Div(10,100);
//    printf("result:%d reason:[%s]\n",res,code_to_str(exit_code));
//    res=Div(2,0);
//    printf("result:%d reason:[%s]\n",res,code_to_str(exit_code));
//    return exit_code;
//
//    //打印默认退出码
//   // for(int errorcode=0;errorcode<255;errorcode++)
//   // {
   //     printf("errrcode[%d]:%s\n",errorcode,strerror(errorcode));
   // }
   // return 0;
    
   // printf("i am a process, pid:%d, ppid:%d\n",getpid(),getppid());
   // sleep(2);
   // return 3;
//}
